
import store, { a, useStore } from '@/store/index';
// import { useStore } from '@/store';
import { NavigationGuard } from 'vue-router'
import { getToken } from '@/utils/auth';
// const store = useStore();

const whiteList = ['/login', '/redirect']
/* 
1.是否白名单 是=>直接next，否=>是否登录=>登录 到第二步，未登录 =>请登录
2.是否有token（是否已登录） 是=> 通过token获取userInfo.permission（路由访问权限）,添加动态路由 否=>请登录
3.动态路由权限添加完成  访问路由是否存在 是=>next， 否=>404页 
*/
const loginPermission: NavigationGuard = async (to, from, next) => {
  if (whiteList.includes(to.path)) {
    return next();
  }
  if (getToken()) {
    next();
  } else {
    next('/login');
  }
}
const menuPermission: NavigationGuard = async (to, from, next) => {
  // 有token，然后判断异步路由是否添加，添加直接next
  // console.log('route2')
  if (getToken()) {
    // 有token 才添加菜单权限，白名单进来的没有token的情况直接next
    try {
      if (!(store.state.user.menuPermission)) { // 如果菜单路由权限未添加
        await store.dispatch('user/getUserInfo');
        await store.dispatch('user/setRoute');
        // TODO: 首次添加route后，访问路由如果不在路由列表中怎么跳转到404
        // 我猜下面写会导致路由重新走一遍全局导航，然后去判断路由是否跳转404
        // 文档中讲解作用：当前的导航被中断，然后进行一个新的导航
        next({
          ...to,
          replace: true
        })
      } else { // 已添加 判断路径是否存在路由列表中
        // to.matched.length === 0 ? next('/404') : next()
        to.matched.length === 0 ? next('/') : next()
      }
    } catch (err) {
      console.log(err);
      // next('/404')
    }
  } else {
    next()
  }


  // 不存在，获取userinfo.permission，过滤出可用路由，添加在store中

  //
}
export default {
  'loginPermission': loginPermission,
  'menuPermission': menuPermission
}